#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
btPoint2PointConstraintFloatData* bullet_NewbtPoint2PointConstraintFloatData(){
	btPoint2PointConstraintFloatData* wrap_out = new btPoint2PointConstraintFloatData();
	return wrap_out;
}

btVector3FloatData* bullet_btPoint2PointConstraintFloatData_GetFieldOfM_pivotInA(btPoint2PointConstraintFloatData* c_this){
	return (btVector3FloatData*)(&c_this->m_pivotInA);
}

btVector3FloatData* bullet_btPoint2PointConstraintFloatData_GetFieldOfM_pivotInB(btPoint2PointConstraintFloatData* c_this){
	return (btVector3FloatData*)(&c_this->m_pivotInB);
}

btTypedConstraintData* bullet_btPoint2PointConstraintFloatData_GetFieldOfM_typeConstraintData(btPoint2PointConstraintFloatData* c_this){
	return (btTypedConstraintData*)(&c_this->m_typeConstraintData);
}

btPoint2PointConstraintDoubleData2* bullet_NewbtPoint2PointConstraintDoubleData2(){
	btPoint2PointConstraintDoubleData2* wrap_out = new btPoint2PointConstraintDoubleData2();
	return wrap_out;
}

btVector3DoubleData* bullet_btPoint2PointConstraintDoubleData2_GetFieldOfM_pivotInA(btPoint2PointConstraintDoubleData2* c_this){
	return (btVector3DoubleData*)(&c_this->m_pivotInA);
}

btVector3DoubleData* bullet_btPoint2PointConstraintDoubleData2_GetFieldOfM_pivotInB(btPoint2PointConstraintDoubleData2* c_this){
	return (btVector3DoubleData*)(&c_this->m_pivotInB);
}

btTypedConstraintDoubleData* bullet_btPoint2PointConstraintDoubleData2_GetFieldOfM_typeConstraintData(btPoint2PointConstraintDoubleData2* c_this){
	return (btTypedConstraintDoubleData*)(&c_this->m_typeConstraintData);
}

btPoint2PointConstraintDoubleData* bullet_NewbtPoint2PointConstraintDoubleData(){
	btPoint2PointConstraintDoubleData* wrap_out = new btPoint2PointConstraintDoubleData();
	return wrap_out;
}

btVector3DoubleData* bullet_btPoint2PointConstraintDoubleData_GetFieldOfM_pivotInA(btPoint2PointConstraintDoubleData* c_this){
	return (btVector3DoubleData*)(&c_this->m_pivotInA);
}

btVector3DoubleData* bullet_btPoint2PointConstraintDoubleData_GetFieldOfM_pivotInB(btPoint2PointConstraintDoubleData* c_this){
	return (btVector3DoubleData*)(&c_this->m_pivotInB);
}

btTypedConstraintData* bullet_btPoint2PointConstraintDoubleData_GetFieldOfM_typeConstraintData(btPoint2PointConstraintDoubleData* c_this){
	return (btTypedConstraintData*)(&c_this->m_typeConstraintData);
}

btPoint2PointConstraint* bullet_NewbtPoint2PointConstraint(btRigidBody* rbA,btRigidBody* rbB,btVector3* pivotInA,btVector3* pivotInB){
	btRigidBody& c_arg_rbA=(btRigidBody&)(*rbA);
	btRigidBody& c_arg_rbB=(btRigidBody&)(*rbB);
	btVector3 const& c_arg_pivotInA=(btVector3 const&)(*pivotInA);
	btVector3 const& c_arg_pivotInB=(btVector3 const&)(*pivotInB);
	btPoint2PointConstraint* wrap_out = new btPoint2PointConstraint(c_arg_rbA,c_arg_rbB,c_arg_pivotInA,c_arg_pivotInB);
	return wrap_out;
}

btPoint2PointConstraint* bullet_NewbtPoint2PointConstraint1(btRigidBody* rbA,btVector3* pivotInA){
	btRigidBody& c_arg_rbA=(btRigidBody&)(*rbA);
	btVector3 const& c_arg_pivotInA=(btVector3 const&)(*pivotInA);
	btPoint2PointConstraint* wrap_out = new btPoint2PointConstraint(c_arg_rbA,c_arg_pivotInA);
	return wrap_out;
}

btConstraintSetting* bullet_btPoint2PointConstraint_GetFieldOfM_setting(btPoint2PointConstraint* c_this){
	return (btConstraintSetting*)(&c_this->m_setting);
}

bool bullet_btPoint2PointConstraint_GetFieldOfM_useSolveConstraintObsolete(btPoint2PointConstraint* c_this){
	return (bool)(c_this->m_useSolveConstraintObsolete);
}

void bullet_btPoint2PointConstraint_getInfo1NonVirtual(btPoint2PointConstraint* c_this,btTypedConstraint::btConstraintInfo1* info){
	btTypedConstraint::btConstraintInfo1 * c_arg_info=(btTypedConstraint::btConstraintInfo1 *)(void*)(info);
	c_this->getInfo1NonVirtual(c_arg_info);
}

void bullet_btPoint2PointConstraint_getInfo2NonVirtual(btPoint2PointConstraint* c_this,btTypedConstraint::btConstraintInfo2* info,btTransform* body0_trans,btTransform* body1_trans){
	btTypedConstraint::btConstraintInfo2 * c_arg_info=(btTypedConstraint::btConstraintInfo2 *)(void*)(info);
	btTransform const& c_arg_body0_trans=(btTransform const&)(*body0_trans);
	btTransform const& c_arg_body1_trans=(btTransform const&)(*body1_trans);
	c_this->getInfo2NonVirtual(c_arg_info,c_arg_body0_trans,c_arg_body1_trans);
}

btVector3* bullet_btPoint2PointConstraint_getPivotInA(btPoint2PointConstraint* c_this){
	btVector3 const& c_out = c_this->getPivotInA();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btPoint2PointConstraint_getPivotInB(btPoint2PointConstraint* c_this){
	btVector3 const& c_out = c_this->getPivotInB();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btPoint2PointConstraint_setPivotA(btPoint2PointConstraint* c_this,btVector3* pivotA){
	btVector3 const& c_arg_pivotA=(btVector3 const&)(*pivotA);
	c_this->setPivotA(c_arg_pivotA);
}

void bullet_btPoint2PointConstraint_setPivotB(btPoint2PointConstraint* c_this,btVector3* pivotB){
	btVector3 const& c_arg_pivotB=(btVector3 const&)(*pivotB);
	c_this->setPivotB(c_arg_pivotB);
}

void bullet_btPoint2PointConstraint_updateRHS(btPoint2PointConstraint* c_this,double timeStep){
	btScalar c_arg_timeStep=timeStep;
	c_this->updateRHS(c_arg_timeStep);
}

btConstraintSetting* bullet_NewbtConstraintSetting(){
	btConstraintSetting* wrap_out = new btConstraintSetting();
	return wrap_out;
}

double bullet_btConstraintSetting_GetFieldOfM_damping(btConstraintSetting* c_this){
	return (double)(c_this->m_damping);
}

double bullet_btConstraintSetting_GetFieldOfM_impulseClamp(btConstraintSetting* c_this){
	return (double)(c_this->m_impulseClamp);
}

double bullet_btConstraintSetting_GetFieldOfM_tau(btConstraintSetting* c_this){
	return (double)(c_this->m_tau);
}

#ifdef __cplusplus
}
#endif
